今天介紹超級超級超級重要的PRIMARY KEY 主鍵,
簡稱PK。每一個資料表都只會有一個PK,
PK像是資料表的身分證字號,
具有「唯一值」、「不能是空值」的特性,
這兩個值聽起來是不是很熟悉?
對的,如果規定資料欄位是PK的話,
直接買一送二,送UNIQUE和NOT NULL的特性。
舉例而言:如果有一張表是便當店的菜單,欄位有便當名稱、價格、主菜,那主鍵會是便當名稱,因為主菜、價格可以重複,但便當名稱是不能重複的,便當名稱重複,就不知道客人是在點哪個了!
除此之外,PK可以被當作其他資料表的「外來鍵」,
如果一個資料表的某欄位設定內容必須是另外一張表的PK的值,
那這個欄位就有「外來鍵」FOREIGN KEY,FK的限制。
延續上一個例子,辦公室今天訂便當,訂便當單的欄位會有員工姓名、想訂的便當名稱、備註,是不是在訂的便當名稱這欄,會要求必須填的跟便當店的菜單一模一樣?這時就會限定訂便當單的便當名稱是外來鍵,對應到便當菜單的主鍵:便當名稱,員工就只能天寫便當店菜當上有的便當名稱,不能自創奇怪的菜名。
那主鍵只能是一個欄位嗎?其實不一定,主鍵可以是多個欄位。
聽起來不太容易理解,但其實就是不能有兩行資料,那幾欄的內容是一模一樣的。
舉例而言:複合主鍵可以想成我們的名字=姓氏+名字,
如果希望一個班級中沒有人的姓名是重複的,
就可以設定主鍵是「姓氏欄位」以及「名字欄位」,
這樣班上可以有很多姓王的同學,可以有很多叫做小美的同學,
但叫做王小美的同學,只能有一個。
PK的寫法和UNIQUE一樣,寫上PRIMARY KEY後在後方括號加入欄位就可以了。
CREATE TABLE class
(id INT NOT NULL,
full_name NVARCHAR(30),
PRIMARY KEY (id));
如果是複合鍵的話,加上逗號填寫第二個以後的欄位即可。
CREATE TABLE class
(first_name NVARCHAR(30),
last_name NVARCHAR(30),
PRIMARY KEY (first_name,last_name));
如果你直接執行,SQL會報錯Error Code: 1050. Table 'class' already exists
上面寫說這張叫做'class'的資料表已經存在了,
那要怎麼辦呢?
第一個可以選擇改名字,把名字改成class2,
或是我們可以刪掉原本的class 表,
複習一下第三日–CRUD初體驗,操作MySQL資料庫的操作語法,試著刪掉原本的class 表。
經過這幾天,我們大致介紹完CREATE TABLE中用的所有語法了,
明天會再看一次語法,然後試著自己創一張TABLE吧!